const { verifyToken } = require('../config/jwt');

// 用户认证中间件
const authenticate = (req, res, next) => {
  // 从请求头获取token
  const authHeader = req.headers.authorization;
  
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({
      code: 401,
      message: '未授权，请登录',
      data: null
    });
  }

  // 提取token
  const token = authHeader.split(' ')[1];

  // 验证token
  const { valid, expired, decoded } = verifyToken(token);

  if (!valid) {
    if (expired) {
      return res.status(401).json({
        code: 401,
        message: '登录已过期，请重新登录',
        data: null
      });
    }
    
    return res.status(401).json({
      code: 401,
      message: '无效的令牌，请重新登录',
      data: null
    });
  }

  // 将用户信息添加到请求对象
  req.user = decoded;

  // 继续处理请求
  next();
};

// 管理员认证中间件
const authenticateAdmin = (req, res, next) => {
  // 从请求头获取token
  const authHeader = req.headers.authorization;
  
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({
      code: 401,
      message: '未授权，请登录',
      data: null
    });
  }

  // 提取token
  const token = authHeader.split(' ')[1];

  // 验证token
  const { valid, expired, decoded } = verifyToken(token);

  if (!valid) {
    if (expired) {
      return res.status(401).json({
        code: 401,
        message: '登录已过期，请重新登录',
        data: null
      });
    }
    
    return res.status(401).json({
      code: 401,
      message: '无效的令牌，请重新登录',
      data: null
    });
  }

  // 检查是否是管理员
  if (decoded.role !== 'admin') {
    return res.status(403).json({
      code: 403,
      message: '权限不足，无法访问',
      data: null
    });
  }

  // 将管理员信息添加到请求对象
  req.admin = decoded;

  // 继续处理请求
  next();
};

module.exports = {
  authenticate,
  authenticateAdmin
}; 